[アップデート] Amazon MacieでHTTP BASIC認証ヘッダー / HTTP Cookie / JWTを検出できるようになりました
Amazon Macieに3種類の新しいマネージドデータ識別子が
こんにちは、のんピ(@non____97)です。
Amazon Macieに3種類の新しいマネージドデータ識別子が追加されました。
このアップデートでS3バケット内の以下情報を検出できるようになりました。
- HTTP BASIC認証ヘッダー
- HTTP Cookie
- JSON Web Token(以降JWT)
AWS公式ドキュメントのマネージド識別子一覧にも追加されています。
アプリケーションのデバッグログをS3バケットに出力していると、なんだか紛れ込みそうな情報ですよね。
早速やってみたので紹介します。
やってみた
テスト用ファイルの作成
HTTP BASIC認証ヘッダー
まず、テスト用のファイルを作成します。
Amazon Macieで検出されるためにはRFC 7617 - The 'Basic' HTTP Authentication Schemeで記載されているようなフィールド名と認証スキームを含む完全なヘッダーが必要です。
今回はAuthorizationヘッダーとProxy-Authorizationヘッダーを入力しました。
HTTP BASIC認証ヘッダーのテスト用ファイルは以下の通りです。
Authorization: Basic bm9uLTk3d293d293 Proxy-Authorization: Basic bm9uLTk3cGllbnBpZW4=
ちなみにbm9uLTk3d293d293
とbm9uLTk3cGllbnBpZW4=
はBASE64でエンコードした文字列です。
> echo bm9uLTk3d293d293 | base64 -d non-97wowwow > echo bm9uLTk3cGllbnBpZW4= | base64 -d non-97pienpien
HTTP Cookie
検出には完全なCookieヘッダーまたはSet-Cookieヘッダーが必要です。
HTTP Cookieのテスト用ファイルは以下の通りです。
Set-Cookie: id=non-97 Cookie: session=8888; lang=ja
JWT
Amazon Macieで検出されるためにはRFC 7519 - JSON Web Token (JWT)で指定された要件に準拠する必要があります。
今回はJSON Web Tokens - jwt.ioでエンコードしました。
JWTのテスト用ファイルは以下の通りです。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Im5vbi05NyIsImlhdCI6MTUxNjIzOTAyMn0.AqLcYeBto0xNa-4aOVtYws-UIgBbVUG2snrSWPBpxYI
エンコード元のヘッダーやペイロード、署名は以下の通りです。
{ "alg": "HS256", "typ": "JWT" }
{ "sub": "1234567890", "name": "non-97", "iat": 1516239022 }
HMACSHA256( base64UrlEncode(JWTヘッダー) + "." + base64UrlEncode(JWTペイロード), non-97-secret ) secret base64 encoded
テスト用ファイルの作成が完了したら、ファイルをS3バケットにアップロードします。
Amazon Macieのジョブの作成
それでは、Amazon Macieのジョブを作成します。
まだAmazon Macieを利用していない場合は、Amazon Macieのコンソールからご利用開始にあたって
をクリックします。
Macieを有効化
をクリックします。
ちなみに作成されるIAMロールのポリシーと信頼関係は以下の通りです。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudtrail:DescribeTrails", "cloudtrail:GetEventSelectors", "cloudtrail:GetTrailStatus", "cloudtrail:ListTags", "cloudtrail:LookupEvents", "iam:ListAccountAliases", "organizations:DescribeAccount", "organizations:ListAccounts", "s3:GetAccountPublicAccessBlock", "s3:ListAllMyBuckets", "s3:GetBucketAcl", "s3:GetBucketLocation", "s3:GetBucketLogging", "s3:GetBucketPolicy", "s3:GetBucketPolicyStatus", "s3:GetBucketPublicAccessBlock", "s3:GetBucketTagging", "s3:GetBucketVersioning", "s3:GetBucketWebsite", "s3:GetEncryptionConfiguration", "s3:GetLifecycleConfiguration", "s3:GetReplicationConfiguration", "s3:ListBucket", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectTagging" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "cloudtrail:CreateTrail", "cloudtrail:StartLogging", "cloudtrail:StopLogging", "cloudtrail:UpdateTrail", "cloudtrail:DeleteTrail", "cloudtrail:PutEventSelectors" ], "Resource": "arn:aws:cloudtrail:*:*:trail/AWSMacieTrail-DO-NOT-EDIT" }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:DeleteBucket", "s3:DeleteBucketPolicy", "s3:DeleteBucketWebsite", "s3:DeleteObject", "s3:DeleteObjectTagging", "s3:DeleteObjectVersion", "s3:DeleteObjectVersionTagging", "s3:PutBucketPolicy" ], "Resource": [ "arn:aws:s3:::awsmacie-*", "arn:aws:s3:::awsmacietrail-*", "arn:aws:s3:::*-awsmacietrail-*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup" ], "Resource": [ "arn:aws:logs:*:*:log-group:/aws/macie/*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:log-group:/aws/macie/*:log-stream:*" ] } ] }
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "macie.amazonaws.com" }, "Action": [ "sts:AssumeRole" ] } ] }
ジョブの作成はジョブ
-ジョブを作成
をクリックします。
まず、対象のS3バケットを選択します。先ほどテスト用ファイルをアップロードしたS3バケットを選択して、次へ
をクリックします。
対象のS3バケットを確認して、問題なければ次へ
をクリックします。
次にデータ検出オプションです。
今回は一回のみのジョブなので、ワンタイムジョブ
を選択して次へ
をクリックします。
次にマネージドデータ識別子オプションです。
今回は全てのマネージドデータ識別子を使用するので、All
のまま次へ
をクリックします。
次にカスタムデータ識別子の選択です。
今回はカスタムデータ識別子は使用しないので、そのまま次へ
をクリックします。
次に名前と説明の入力です。
ジョブの名前としてamazon-macie-test
を入力して次へ
をクリックします。
最後に設定内容の確認です。
問題がなければ送信
をクリックします。
ジョブの作成は以上です。
検出結果の確認
10分ほど待つとジョブの実行が完了していました。
ジョブのJSONを確認すると以下のようになっていました。
{ "clientToken": "0adeb9d9-e01c-42ed-923f-ecee801627f6", "createdAt": "2022-04-26T04:51:18.709Z", "customDataIdentifierIds": [], "description": null, "initialRun": false, "jobArn": "arn:aws:macie2:us-east-1:<AWSアカウントID>:classification-job/912a29dc5e7c4b72e5b25961555b4320", "jobId": "912a29dc5e7c4b72e5b25961555b4320", "jobStatus": "COMPLETE", "jobType": "ONE_TIME", "lastRunErrorStatus": { "code": "NONE" }, "lastRunTime": "2022-04-26T04:51:23.990Z", "managedDataIdentifierSelector": "ALL", "name": "amazon-macie-test", "s3JobDefinition": { "bucketDefinitions": [ { "accountId": "<AWSアカウントID>", "buckets": [ "amazon-macie-test-20220426" ] } ], "scoping": {} }, "samplingPercentage": 100, "statistics": { "approximateNumberOfObjectsToProcess": 0, "numberOfRuns": 1 }, "tags": {} }
検出結果を確認すると、3件検出されていました。
amazon-macie-test-20220426/HTTP_BASIC_AUTH_HEADER.txt
:SensitiveData:S3Object/Credentials
amazon-macie-test-20220426/JSON_WEB_TOKEN.txt
:SensitiveData:S3Object/Credentials
amazon-macie-test-20220426/HTTP_COOKIE.txt
:SensitiveData:S3Object/Personal
今回追加されたマネージド識別子で検出されていそうですね。
詳細をそれぞれ確認していきます。
HTTP BASIC認証ヘッダー検出の詳細は以下の通りです。
「認証情報 Http basic auth header」が2
となっており、テストファイルに入力した2行どちらも検出されたことが分かります。
JWT検出の詳細は以下の通りです。
「認証情報 Json web token」が1
となっており、テストファイルに入力した内容が検出されたことが分かります。
HTTP Cookie検出の詳細は以下の通りです。
「個人情報 Http cookie」が2
となっており、テストファイルに入力した2行どちらも検出されたことが分かります。
クレデンシャルの扱いには気をつけよう
Amazon MacieでHTTP BASIC認証ヘッダー / HTTP Cookie / JWTを検出できるようになったアップデートを紹介しました。
上手く活用すれば、「クレデンシャルがログに残ったまま運用がされていました」みたいなことを防げそうですね。
SecurityHubと連携させてアラートを飛ばすことも可能なので、Amazon Macieを使う場合はセットで使いたいです。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!